from django.contrib.auth import login
from django.db import DatabaseError
from django.shortcuts import render, redirect
from django.urls import reverse

from django.views import View
from django import http
import re
import logging
logger = logging.getLogger('django')

#注册页面系统类
from apps.users.models import User

class RegisterView(View):

    def get(self, request):
        return render(request, 'register.html')

    def post(self, request):
        data = request.POST
        username = data.get('username')
        password = data.get('password')
        password2 = request.POST.get('password2')
        mobile = request.POST.get('mobile')
        allow = request.POST.get('allow')

        if not all([username, password, password2, mobile, allow]):
            return http.HttpResponseBadRequest('缺少必传参数')
        # 判断用户名是否是5-20个字符
        if not re.match(r'^[a-zA-Z0-9_]{5,20}$', username):
            return http.HttpResponseBadRequest('请输入5-20个字符的用户名')
        # 判断密码是否是8-20个数字
        if not re.match(r'^[0-9A-Za-z]{8,20}$', password):
            return http.HttpResponseBadRequest('请输入8-20位的密码')
        # 判断两次密码是否一致
        if password != password2:
            return http.HttpResponseBadRequest('两次输入的密码不一致')
        # 判断手机号是否合法
        if not re.match(r'^1[3-9]\d{9}$', mobile):
            return http.HttpResponseBadRequest('请输入正确的手机号码')
        # 判断是否勾选用户协议
        if allow != 'on':
            return http.HttpResponseBadRequest('请勾选用户协议')

        try:
            user = User.objects.create_user(username=username, password=password, mobile=mobile)



        except Exception as e:
            print(e)
            # return render(request, 'register.html', {'register_errmsg': '注册失败'})
        #
        #直接使用django自带的login方法。直接保存登陆状态信息到session

        login(request, user)
        return redirect(reverse('contents:index'))

class RegisterUsernameCountView(View):

    def get(self,request,username):
        count = User.objects.filter(username__exact=username).count()
        return http.JsonResponse({'count':count})

class RegisterMobileCountView(View):

    def get(self,request,mobile):
        count = User.objects.filter(mobile__exact=mobile).count()

        return http.JsonResponse({'count':count})
